<?php
namespace app\api\controller;

use think\admin\Controller;
use think\facade\Db;

class ApiBase extends Controller
{

    protected $uid; // 用户openid
    protected $redis_key; // redis目录

    /**
     * 构造方法
     * Base constructor.
     */
    public function __construct() {
        // 计算项目名称
        $temp = explode("/", str_replace('\\', '/', substr(app()->getRootPath(), 0, strlen(app()->getRootPath()) - 1)));
        $this->redis_key = end($temp);
    }

    /**
     * h5获取用户id
     * @return void
     * @author Sam
     */
    public   function get_h5_user_id(){
        $user_id = session("{$this->redis_key}_user");
        if(!$user_id) return $this->error(-1,'请重新登录');
        $info = Db::name('users')->where('id',$user_id)->count();
        if(!$info) return $this->error(-1,'请重新登录');
        return $user_id;
    }
    /**
     * 中间件模式获取用户uid
     * @return void
     * @author Sam
     */
    public  static function get_user_id(){
        return 1;
        return app('auth_user')->getId();
    }

       /**
     * 中间件模式获取用户信息
     * @return void
     * @author Sam
     */
    public static function get_user_info(){
        return Db::name('users')->where('id',1)->find();
        return app('auth_user')->getData();
    }

    /**
     * 中间件模式获取原始JWT token信息
     * @return void
     * @author Sam
     */
    public static  function get_token_info(){
        return app('auth_user')->getToken();
    }



    /**
     * 通过token换取openid和user_id  非中间件模式 重复验证token  返回用户UID 不建议使用
     * @return bool|string
     */
    public static function get_base_user_id() {
        $token = request()->header('token');
        $jwt = \Jwt::getInstance();
        $jwt->setKey(Env::get('TOKEN_KEY')); //设置秘钥 每个项目务必更换
        $jwt->setIss(Env::get('TOKEN_ISS'));  //签发者  可以写项目名或者开发者姓名
        $info= $jwt->verifyToken($token);
        if(!$info) \json_response(-1,'token验证失败，请重新登录');
        $uid = $info['claim']['uid'];
         // 验证uid真实性
         $user_info = db('user')->where('id', $uid)->field('id as user_id, openid')->count();
         if(empty($user_info)) json_response(0, '用户不存在');
         return $uid;
    }


    // /**
    //  * 用户id换取token  测试结算使用
    //  * @return bool|string
    //  */
    // public function get_user_token($uid){
    //     $jwt = \Jwt::getInstance();
    //     $jwt->setKey(Env::get('TOKEN_KEY')); //设置秘钥 每个项目务必更换
    //     $jwt->setIss(Env::get('TOKEN_ISS'));  //签发者  可以写项目名或者开发者姓名
    //     $jwt->setIat(time()); //签发时间
    //     $jwt->setExp(time() + 60*60*24 * 7); //过期时间
    //     $jwt->setClaim(['uid'=>$uid]); //储存数据
    //     $token = $jwt->getToken();
    //     json_response(1,'success',$token);
    // }

}
